package 代码随想录_补充题目.字符串反转系列;

/**
 * @author zx
 * @create 2023-02-08 22:57
 */
public class 反转字符串_II {
    /**
     * @return 代码随想录,多看几遍吧,现在看着有点迷
     */
    public String reverseStr(String s, int k) {
        char[] arr = s.toCharArray();
        for(int i = 0;i < arr.length;i += 2 * k){
            // 1. 每隔 2k 个字符的前 k 个字符进行反转
            // 2. 剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符
            if (i + k <= s.length()) {
                reverse(arr,i,i + k - 1);
                continue;
            }
            // 3. 剩余字符少于 k 个，则将剩余字符全部反转。
            reverse(arr,i, arr.length - 1);
        }
        return new String(arr);
    }
    //字符串类型不能直接被交换
    private void reverse(char[] arr, int left, int right){
        while(left < right){
            char temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;
        }
    }

    /**
     * @return 看人家的简洁版，但是自己不好想
     */
    public String reverseStr2(String s, int k) {
        char[] arr = s.toCharArray();
        for(int i = 0;i < arr.length;i += 2 * k){
            reverse(arr, i, Math.min(i + k, arr.length) - 1);
        }
        return new String(arr);
    }

}
